package com.cloudfun.msglisten.entity;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.annotations.OptimisticLocking;

import javax.persistence.*;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author linyangping
 * @date 2019/9/5
 */
@Data
@MappedSuperclass
@OptimisticLocking
public abstract class BaseEntity {

    /**
     * 数据库版本信息，Hibernate自动维护
     */
    @Version
    public Integer version;

    /**
     * 创建时间
     */
    @Column(name = "create_time", columnDefinition = "varchar(14) default null comment '录入时间'")
    public String createTime;

    /**
     * 操作时间
     */
    @Column(name = "update_time", columnDefinition = "varchar(14) default null comment '操作时间'")
    public String updateTime;

    /**
     * 数据Insert插入前的操作
     */
    @PrePersist
    public void setInsertBefore() {
        this.createTime = String.valueOf(System.currentTimeMillis());
        this.updateTime = String.valueOf(System.currentTimeMillis());
    }

    /**
     * 数据Update修改前的操作
     */
    @PreUpdate
    public void setUpdateBefore() {
        this.updateTime = String.valueOf(System.currentTimeMillis());
    }

    /**
     * 时间戳转化为yyyy-MM-dd HH:mm:ss
     *
     * @param longTime 13位时间戳
     * @return yyyy-MM-dd HH:mm:ss
     */
    public static String getLongToString(Long longTime) {
        if (longTime == null) {
            return null;
        }
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date(longTime);
        return sf.format(date);
    }

    /**
     * 获取创建时间
     *
     * @return 时间戳
     */
    @Transient
    @ApiModelProperty(value = "创建时间的字符串表示")
    public String getCreateAtStr() {
        return createTime;
    }

    /**
     * 获取更新时间
     *
     * @return 时间戳
     */
    @Transient
    @ApiModelProperty(value = "修改时间的字符串表示")
    public String getUpdatedAtStr() {
        return updateTime;
    }


}
